This invention relates to a memory management method, a computer system, and a computer-readable memory, and more particularly, to a technology of controlling the utilization efficiency of a memory by memory management based on whether or not data stored in the memory is necessary to the execution of a program.
In developing a computer program, processing of allocating or releasing a memory area that is used by the program is known to be prone to program bugs such as reference to invalid areas. In large-scale program development, in particular, it is becoming difficult for a programmer to have a complete grasp on allocation and release processing of every memory area.
As a solution to this, using a garbage collector which automates memory management in a program can be given. Java, one of language processors having a memory management function that utilizes a garbage collector, is equipped with means for memory area allocation but uses a garbage collector for release. A Java program developer therefore explicitly specifies memory area allocation but does not need to write memory area release processing. The memory area release function executed by a garbage collector is garbage collection (hereinafter, referred to as “GC”).
GC is a function of picking out data (an object) that is no longer needed among memory areas dynamically allocated by a program, and automatically releasing an area that has been occupied by the object. A commonly practiced GC method is to suspend all running threads of a Java program while unnecessary data is collected and the memory area is released.
In recent years, a drop in response performance due to lengthy suspension by GC has become a problem. Methods proposed or developed to solve the problem include the Java Virtual Machine which has a heap memory that is not counted as a target of GC (hereinafter, referred to as external heap) besides a heap memory that is counted as a target of GC (see, for example, JP 2009-037547 A).
The conventional heap memory in a Java virtual machine is subject to memory management by GC. The external heap, on the other hand, is an area that allows for memory area management by a programmer. Specifically, the programmer writes, in a source code, instructions to allocate a memory area from an external heap, to generate an object in the allocated memory area, and to release the memory area. The external heap is thus treated as a heap memory that can be managed by the program.
In the related art example described above, the memory area in the external heap allocated by the program is defined as an external memory area. The external memory area keeps storing an object generated by the program until the processing of releasing the external memory area is executed. The mixed presence of objects necessary and unnecessary to execute the Java program in an external memory area lowers the utilization efficiency of the external memory area. The resultant problem is that a longer interval between the allocation and release of an external memory area could mean increase of unnecessary objects within the external memory area and consequently a higher chance of the external memory area dropping in utilization ratio.